#ifndef EtatGraphics_H
#define EtatGraphics_H

#include <QtGui>

class Etat;


/**
 * @author CARON LOPEZ
 * @brief Représentation graphique d'un état
 *
 */
class EtatGraphics : public QObject, public QGraphicsItem
{
    Q_OBJECT
    Q_INTERFACES(QGraphicsItem)

public:
    EtatGraphics(Etat *etat);

    /**
     * @brief Rend l'élèment déplaÃ§able sur le plateau
     *
     * @param b
     */
    void setMove(bool b);
    bool getMove();

    /**
     * @brief Retourne l'état associé de l'élément graphique
     *
     * @param e
     */
    void getEtat(Etat *e){ etat = e; }

    void setPos(int x, int y);
    void setPos(QPointF point);
    QPointF getPos();

    enum { Type = UserType + 1 };
    int type() const { return Type; }

    QRectF boundingRect() const;
    QPainterPath shape() const;

    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);

public slots:

    /**
     * @brief Slot effectuant la mise à jours de l'item
     *
     */
    void updateGraphics();

protected:
    Etat *etat;

    bool dragOver;
    QPointF newPos;

    void mousePressEvent(QGraphicsSceneMouseEvent *event);
    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
    void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);

    void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
    void dragLeaveEvent(QGraphicsSceneDragDropEvent *event);
    void dropEvent(QGraphicsSceneDragDropEvent *event);

    QVariant itemChange(GraphicsItemChange change, const QVariant &value);
};

#endif // EtatGraphics_H
